package com.doit.day05

import scala.beans.BeanProperty


object _02_面向对象之class类 {
  def main(args: Array[String]): Unit = {
    //class 类创建对象 直接和 java 一样要new
    val zss: Phone = new Phone(1, "zss", 18, "male")
    println(zss.id) //==>等于java中的zss.getId()
    println(zss.id) //==>等于java中的zss.getId()
    //解密：zss.id 是他自己给我们写的getId 只不过他的方法名就叫id
    //zss.id = 10 是他自己给我们写的setId 只不过他的方法名就叫id=  id$eq
//    zss.id=(20)

    val phone: Phone1 = new Phone1()
    println(phone.age)
    println(phone.name)
    println(phone.gender)
    println(phone.id)


    val phone1: Phone1 = new Phone1(1, "zss", 19, "male")
    println(phone1.age)
    println(phone1.name)
    println(phone1.gender)
    println(phone1.id)

    val phone2: Phone1 = new Phone1(2, "lss", 20)
    println(phone2.age)
    println(phone2.name)
    println(phone2.gender)
    println(phone2.id)



  }
}

//scala中的class类和构造器交织在一起
//class Phone 既是类 也是构造方法
//val id:Int,val name:String,val age:Int,val gender:String 就是你写的成员变量
//变量是用val修饰的，那么底层会给我们写get方法，如果是var修饰的，给我们get和set方法
// 如果val和var都不写呢？ 那么这个变量就代表的是局部变量，不是成员变量
//@BeanProperty  这个注解会给我们自动写get和set方法，方法名和java中一样
class Phone(@BeanProperty
             val id:Int,
            @BeanProperty
            val name:String,
            @BeanProperty
            val age:Int,
            @BeanProperty
            val gender:String){
  override def toString: String = getId+""
}


class Phone1(){
  var id:Int = _
  var name:String = _
  var age:Int = _
  var gender:String = _

  //提供辅助构造器
  def this(id:Int,name:String,age:Int,gender:String){
    //辅助构造器第一行代码必须调用主构造器或者其他辅助构造器
    this()//==> val phone1 = new Phone1()
    this.id = id
    this.name = name
    this.gender = gender
    this.age = age
  }

  def this(id:Int,name:String,age:Int){
    this(id, name, age, "male")
  }


}

